Skip to content

K8S V1.26安装kube-prometheus安装

一、介绍

github项目地址:https://github.com/prometheus-operator/kube-prometheus/

Kube Prometheus是一个开源项目,它将Prometheus、Grafana、Alertmanager和一系列Exporter等组件集成在一起,为Kubernetes集群提供全方位的监控和告警功能。Prometheus负责数据采集和存储,Grafana提供可视化的监控界面,Alertmanager则负责根据预设规则发送告警信息。

目前支持的版本和对应关系如下:

kube-prometheus stackKubernetes 1.23Kubernetes 1.24Kubernetes 1.25Kubernetes 1.26Kubernetes 1.27Kubernetes 1.28Kubernetes 1.29Kubernetes 1.30Kubernetes 1.31
release-0.11xxxxxx
release-0.12xxxxxx
release-0.13xxxx
release-0.14x
mainxx

由于基于Kubernetes 1.26安装,Kubernetes 1.28验证也能支持。

kube-prometheus版本使用release-0.13

二、包下载

#从github下载包,如果有网络现在,请离线下载
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz
#导入包
tar -xf kube-prometheus-0.13.0.tar.gz

三、修改镜像地址(可选)

如果镜像地址国内访问不到,则需要修改地址,以我内部的harbor地址为例:https://192.168.1.10,前提是需要把镜像先下载到私有镜像仓库

#进入配置文件路径
cd kube-prometheus-0.13.0/manifests

#使用国内镜像代理源
find ./ -type f |xargs sed -ri 's+registry.k8s.io/+k8s.mirror.nju.edu.cn/+g'
find ./ -type f |xargs sed -ri 's+quay.io/+k8s.mirror.nju.edu.cn/+g'

# 使用内网harbor仓库
find ./ -type f |xargs sed -ri 's+registry.k8s.io/+192.168.1.10/+g'
find ./ -type f |xargs sed -ri 's+quay.io/+192.168.1.10/+g'

四、修改service端口为Nodeport

如果使用ingress访问,则跳过此步骤,自行增加ingress配置。注意Nodeport是没有被占用的。

3.1 prometheus-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.46.0
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort  #新增类型
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 30000 #新增端口
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

3.2 grafana-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 9.5.3
  name: grafana
  namespace: monitoring
spec:
  type: NodePort  #新增类型
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30001 #新增端口
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus

3.3 alertmanager-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 0.26.0
  name: alertmanager-main
  namespace: monitoring
spec:
  type: NodePort   #新增
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 30002  #新增
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

五、安装

#初始化一些信息
kubectl apply --server-side -f manifests/setup
kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
#执行安装
kubectl apply -f manifests/

六、数据持久化(可选)

这里使用NFS进行数据持久化,需要提前安装nfs-csi-provisioner,并创建好存储类。

6.1 安装 nfs-csi-provisioner(如果环境已安装则跳过)

bash
#本地安装 
git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
./deploy/install-driver.sh v4.7.0 local

#查看pod状态
kubectl -n kube-system get pod -o wide -l app=csi-nfs-controller
kubectl -n kube-system get pod -o wide -l app=csi-nfs-node

安装过程中需要拉取镜像,可能拉取不到,请自己修改镜像地址,主要涉及以下几个文件:

csi-driver-nfs/deploy目录下这两个文件:

csi-nfs-controller.yaml

csi-nfs-node.yaml

也可以从以下地址下载压缩包,然后导入至k8s集群中:

nfs-csi-provisioner v4.7.0镜像包

6.2 创建存储类

创建存储类配置文件并且执行vi prometheus-data-db-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: prometheus-data-db
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.3.119			#nfs服务地址
  share: /app/nfsdata/prometheus/   #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1
#执行配置文件
kubectl apply -f prometheus-data-db-sc.yaml

6.3 Prometheus持久化

执行prometheus-prometheus.yaml在文件末尾增加以下内容:

#在文件末尾添加以下内容:
  retention: 30d	#数据保存天数
  storage:			#存储配置
    volumeClaimTemplate:
      spec:
        storageClassName: prometheus-data-db
        resources:
          requests:
            storage: 50Gi
#执行更新
kubectl apply -f prometheus-prometheus.yaml

6.4 grafana持久化

6.4.1 创建存储类

执行vim grafana-pvc.yaml,复制以下内容:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana-pvc
  namespace: monitoring  #指定namespace为monitoring
spec:
  storageClassName: grafana-sc #指定StorageClass,没有可以不填写这一行。自己手动创建pv
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

vim grafana-sc.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: grafana-sc
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.3.119			#nfs服务地址
  share: /app/nfsdata/grafana/   #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1

6.4.2 创建存储类声明

执行vim grafana-sc.yaml,复制以下内容:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: grafana-sc
provisioner: nfs.csi.k8s.io
parameters:
  server: 192.168.3.119			#nfs服务地址
  share: /app/nfsdata/grafana/   #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - nfsvers=4.1

6.4.3 修改grafana配置

执行vim grafana-sc.yaml,修改以下内容:

**注意:**下面是两种方式,请自行选择

#找到以下位置      
      volumes:
      #注释以下两行
      #- emptyDir: {}
      #  name: grafana-storage
      #添加以下内容,这个直接用nfs卷,如需使用pvc方式,请先创建存储类
      - name: grafana-storage
        nfs:
          server: 192.168.3.119
          path: /app/nfsdata/grafana
      #PVC方式
      - name: grafana-storage
        persistentVolumeClaim:
          claimName: grafana-pvc

七、访问页面

#prometheus
http://IP:30000
#grafana  默认账号密码:admin/admin
http://IP:30001
#alertmanager
http://IP:30002

7.1 将"ClusterIP" 改为 "NodePort" 类型,浏览器使用nodeip+端口方式访问不了

这个坑在安装的时候困扰了许久,几度以为是安装失败,通过以下方案解决

解决方案:执行下面的命令,删除网络策略,让集群重新加载k8s网络。

kubectl delete networkpolicy --all -n monitoring

img